package com.hspedu.Arrays;

import java.util.Arrays;
import java.util.Comparator;

/**
 * @Author Stringzhua
 * @Date 2024/3/9 20:09
 * description:
 */
public class ArraysMethod01 {
    public static void main(String[] args) {
        Integer[] integers = {1, 20, 90, 100};
        //遍历数组
//        for (int i = 0; i < integers.length; i++) {
//            System.out.println(integers[i]);
//        }
//        1.直接使用Arrays.toString()方法,显示数组信息
//        System.out.println(Arrays.toString(integers));//[1, 20, 90, 100]

        //2.演示sort方法的使用
        Integer arr[] = {1, -1, 7, 0, 89};
        //step1:可以使用冒泡排序,也可以使用Arrays提供的sort方法排序
        //step2:因为数组是引用类型,所以通过sort排序后,会直接影响到实参 arr
        //step3:sort重载的,也可以通过传入一个接口
        //step4:调用sort定制排序时,传入的两个参数
        // (1)排序的数组arr
        // (2)实现了Comparator接口的匿名内部类，要求实现compare方法
        //step5:先演示效果，再解释
        //step6:这里体现一种接口编程的方式，查看源码
        //step7:源码分析
        //(1)Arrays.sort(arr,new Comparator)
        //(2)最终到  TimSort类的  private static <T> void binarySort(T[] a, int lo, int hi, int start,
        //                                       Comparator<? super T> c) ()
        //(3)执行到binarySort方法的代码,会根据动态绑定机制,c.compare()执行到传入的
        //匿名内部类的compare方法
        //  */
        //            while (left < right) {
        //                int mid = (left + right) >>> 1;
        //                if (c.compare(pivot, a[mid]) < 0)
        //                    right = mid;
        //                else
        //                    left = mid + 1;
        //            }
        //(4)new Comparator() {//匿名内部类
        //            @Override
        //            public int compare(Object o1, Object o2) {
        //                Integer i1 = (Integer) o1;
        //                Integer i2 = (Integer) o2;
        //                return i2 - i1;
        //            }
        //        }
        //(5)public int compare(Object o1, Object o2)该方法返回的值>0还是<0
        // 会影响整个排序的结果,这就充分体现了接口编程、动态绑定、匿名内部类的综合使用
        // 将来的底层的框架和源码的使用方式会非常常见

//        Arrays.sort(arr);//默认排序方法
        //定制排序
        Arrays.sort(arr, new Comparator() {//匿名内部类
            @Override
            public int compare(Object o1, Object o2) {
                Integer i1 = (Integer) o1;
                Integer i2 = (Integer) o2;
                return i2 - i1;
            }
        });
        System.out.println("===排序后===");
        System.out.println(Arrays.toString(arr));
    }
}
